package com.sise.Array;

/**
 *      9. 回文数
 *
 *      给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
 *      回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。
 *
 *      输入：x = 121
 *      输出：true
 *
 *      题解：
 *      折半
 *      循环停止条件：当原始数字(x)小于或等于反转后的数字(revertNumber)，就意味着我们已经处理了一半位数的数字了。
 *      例如 123321，x = 123，revertNumber = 321
 */
public class _09_isPalindrome {
    public boolean isPalindrome(int x) {

        if (x < 0 || (x % 10 == 0 && x != 0)) {     // 如果 x < 0 则说明不是回文，如果数字最后一位数为0，为了满足则第一位也应该为0，故此也不满足
            return false;
        }

        int revertNumber = 0;
        while (x > revertNumber) {
            revertNumber = revertNumber * 10 + x % 10;          // 当前值 * 10 + 新的余数
            x = x / 10;                                         // 去掉最后一位，比如 123 去掉最后一位就变成 12
        }
        return x == revertNumber || x == revertNumber / 10;     // 如果是奇数，那么 revertNumber / 10 可以去除处于中位的数字，例如 12321，此时去除的就是 3，故此这里使用的是 或条件
    }
}
